%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Tests %%%%

tablero1([
  [_, _, _, _],
  [_, o, _, _],
  [_, _, o, _],
  [_, _, _, _]
]).

silueta1([
  [x, x],
  [_, x]
]).

algunasPiezas([
  orientacion(palito, [[x, x, x, x]]),

  orientacion(palito, [
                       [x],
                       [x],
                       [x],
                       [x]]),

  orientacion(ele, [
                    [x, _],
                    [x, _],
                    [x, x]]),

  orientacion(ele, [
                    [_, _, x],
                    [x, x, x]]),

  orientacion(ele, [
                    [x, x],
                    [_, x],
                    [_, x]]),

  orientacion(ele, [
                    [x, x, x],
                    [x, _, _]]),

  orientacion(ese, [
                    [_, x, x],
                    [x, x, _]]),

  orientacion(ese, [
                    [x, _],
                    [x, x],
                    [_, x]])
]).

nuevasPiezas([
  orientacion(cruzGrande, [
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [x, x, x, x, x, x, x],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _]]),

  orientacion(cruzChica, [
                          [_, x, _],
                          [x, x, x],
                          [_, x, _]]),

  orientacion(cuadradoChico, [[x]])
]).

tetrominos([
  orientacion(palito, [[x, x, x, x]]),
  orientacion(palito, [
                       [x],
                       [x],
                       [x],
                       [x]]),

  orientacion(ele, [
                    [x, _],
                    [x, _],
                    [x, x]]),

  orientacion(ele, [
                    [_, _, x],
                    [x, x, x]]),

  orientacion(ele, [
                    [x, x],
                    [_, x],
                    [_, x]]),
                    
  orientacion(ele, [
                    [x, x, x],
                    [x, _, _]]),
                    
  orientacion(jota, [
                     [x, x],
                     [x, _],
                     [x, _]]),

  orientacion(jota, [
                     [x, _, _],
                     [x, x, x]]),

  orientacion(jota, [
                     [_, x],
                     [_, x],
                     [x, x]]),

  orientacion(jota, [
                     [x, x, x],
                     [_, _, x]]),

  orientacion(ese, [
                    [_, x, x],
                    [x, x, _]]),

  orientacion(ese, [
                    [x, _],
                    [x, x],
                    [_, x]]),

  orientacion(zeta, [
                     [x, x, _],
                     [_, x, x]]),

  orientacion(zeta, [
                     [_, x],
                     [x, x],
                     [x, _]]),

  orientacion(cuadrado, [
                         [x, x],
                         [x, x]]),

  orientacion(te, [
                   [x, x, x],
                   [_, x, _]]),

  orientacion(te, [
                   [x, _],
                   [x, x],
                   [x, _]]),

  orientacion(te, [
                   [_, x, _],
                   [x, x, x]]),

  orientacion(te, [
                   [_, x],
                   [x, x],
                   [_, x]])
]).

tetrominos2([
  orientacion(palito, [[x, x, x, x]]),
  orientacion(palito, [
                       [x],
                       [x],
                       [x],
                       [x]]),

  orientacion(ele, [
                    [x, _],
                    [x, _],
                    [x, x]]),

  orientacion(ele, [
                    [_, _, x],
                    [x, x, x]]),

  orientacion(ele, [
                    [x, x],
                    [_, x],
                    [_, x]]),

  orientacion(ele, [
                    [x, x, x],
                    [x, _, _]]),

  orientacion(jota, [
                     [x, x],
                     [x, _],
                     [x, _]]),

  orientacion(jota, [
                     [x, _, _],
                     [x, x, x]]),

  orientacion(jota, [
                     [_, x],
                     [_, x],
                     [x, x]]),

  orientacion(jota, [
                     [x, x, x],
                     [_, _, x]]),

  orientacion(ese, [
                    [_, x, x],
                    [x, x, _]]),

  orientacion(ese, [
                    [x, _],
                    [x, x],
                    [_, x]]),

  orientacion(zeta, [
                     [x, x, _],
                     [_, x, x]]),

  orientacion(zeta, [
                     [_, x],
                     [x, x],
                     [x, _]]),

  orientacion(cuadrado, [
                         [x, x],
                         [x, x]]),

  orientacion(te, [
                   [x, x, x],
                   [_, x, _]]),

  orientacion(te, [
                   [x, _],
                   [x, x],
                   [x, _]]),

  orientacion(te, [
                   [_, x, _],
                   [x, x, x]]),

  orientacion(te, [
                   [_, x],
                   [x, x],
                   [_, x]]),

  orientacion(palitito, [
                               [x],
                               [x]]),

  orientacion(palitito, [[x,x]]),

  orientacion(cruzGrande, [
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [x, x, x, x, x, x, x],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _],
                           [_, _, _, x, _, _, _]]),

  orientacion(cruzChica, [
                          [_, x, _],
                          [x, x, x],
                          [_, x, _]]),

  orientacion(cuadradoChico, [[x]])

]).

tablero2([
  [_, _, _, _],
  [_, 1, 2, _],
  [_, 3, 4, _],
  [_, _, 5, _]
]).

juego1(juego([
  [_, _, _, _],
  [_, _, _, _],
  [_, _, _, _],
  [_, _, _, _]
], [_, 15, _, _], [_, _, 14, _])).

% juego1(Juego), algunasPiezas(DiccionarioPiezas), PiezasDisponibles = [pieza(palito, 4), pieza(ele, 7), pieza(ele, 3), pieza(ese, 2)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).

juego2(juego([
  [1, _, _, 7],
  [_, _, _, _],
  [0, _, _, _],
  [_, _, 5, _]
], [_, _, _, _], [4, 6, 11, 16])).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

juego3(juego([
[2, 3, 4, _],
[1, _, _, _],
[_, _, _, _]
] , [10, 11, 12],[20, 1, 2, 2])).

% juego3(Juego), algunasPiezas(DiccionarioPiezas), PiezasDisponibles = [pieza(palito, 4), pieza(ele, 7)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
% false.

juego4(juego([
[2, 3, 4, _],
[1, _, _, _],
[_, _, _, _]
] , [_, _, _],[_, _, _, _])).

% juego4(Juego), algunasPiezas(DiccionarioPiezas), PiezasDisponibles = [pieza(palito, 4), pieza(ele, 7)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).

%     |   7  14  15  18
% ----+------------------
% 16  |   2   3   4   7
% 22  |   1   7   7   7
% 16  |   4   4   4   4

juego5(juego([
[_, _, _, _, _],
[_, _, _, _, _],
[_, _, _, _, _]
],[_, _, _],[_, _, _, _, _])).

% juego5(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [pieza(palito, 4), pieza(ele, 7), pieza(jota, 1), pieza(palitito,5),pieza(cuadradoChico,3)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).

%     |   6   8  12  16  19
% ----+----------------------
% 23  |   4   4   4   4   7
% 25  |   1   3   7   7   7
% 13  |   1   1   1   5   5
% 
%     |  14   6  12  12  17
% ----+----------------------
% 23  |   4   4   4   4   7
% 27  |   5   1   7   7   7
% 11  |   5   1   1   1   3
% 
%     |  16  16  18   8   3
% ----+----------------------
% 17  |   4   4   4   4   1
% 21  |   5   5   7   3   1
% 23  |   7   7   7   1   1
% 
%     |  18  16  16   8   3
% ----+----------------------
% 17  |   4   4   4   4   1
% 25  |   7   7   7   3   1
% 19  |   7   5   5   1   1
% 
%     |  14  18  14  12   3
% ----+----------------------
% 17  |   4   4   4   4   1
% 27  |   5   7   7   7   1
% 17  |   5   7   3   1   1
% 
%     |  21  14   6  10  10
% ----+----------------------
% 23  |   7   4   4   4   4
% 21  |   7   3   1   5   5
% 17  |   7   7   1   1   1
% 
%     |  21  12   8   6  14
% ----+----------------------
% 23  |   7   4   4   4   4
% 15  |   7   1   1   1   5
% 23  |   7   7   3   1   5
% 
%     |  21  14  10  10   6
% ----+----------------------
% 23  |   7   4   4   4   4
% 13  |   7   3   1   1   1
% 25  |   7   7   5   5   1
% 
%     |   5  12  12  18  14
% ----+----------------------
% 17  |   1   4   4   4   4
% 15  |   1   1   1   7   5
% 29  |   3   7   7   7   5
% 
%     |   7  10  12  14  18
% ----+----------------------
% 17  |   1   4   4   4   4
% 13  |   1   1   1   3   7
% 31  |   5   5   7   7   7
% 
%     |   6  10  10  14  21
% ----+----------------------
% 25  |   1   5   5   7   7
% 13  |   1   1   1   3   7
% 23  |   4   4   4   4   7
% 
%     |  14   6   8  12  21
% ----+----------------------
% 23  |   5   1   3   7   7
% 15  |   5   1   1   1   7
% 23  |   4   4   4   4   7
% 
%     |  10  10   6  14  21
% ----+----------------------
% 17  |   1   1   1   7   7
% 21  |   5   5   1   3   7
% 23  |   4   4   4   4   7
% 
%     |  18  14  12  10   7
% ----+----------------------
% 31  |   7   7   7   5   5
% 13  |   7   3   1   1   1
% 17  |   4   4   4   4   1
% 
%     |  14  18  12  12   5
% ----+----------------------
% 29  |   5   7   7   7   3
% 15  |   5   7   1   1   1
% 17  |   4   4   4   4   1
% 
%     |   3  12  14  18  14
% ----+----------------------
% 17  |   1   1   3   7   5
% 27  |   1   7   7   7   5
% 17  |   1   4   4   4   4
% 
%     |   3   8  16  16  18
% ----+----------------------
% 19  |   1   1   5   5   7
% 25  |   1   3   7   7   7
% 17  |   1   4   4   4   4
% 
%     |   3   8  18  16  16
% ----+----------------------
% 23  |   1   1   7   7   7
% 21  |   1   3   7   5   5
% 17  |   1   4   4   4   4
% 
%     |  17  12  12   6  14
% ----+----------------------
% 11  |   3   1   1   1   5
% 27  |   7   7   7   1   5
% 23  |   7   4   4   4   4
% 
%     |  19  16  12   8   6
% ----+----------------------
% 13  |   5   5   1   1   1
% 25  |   7   7   7   3   1
% 23  |   7   4   4   4   4

juego6(juego([
[_, _, _, _],
[_, _, _, _]
],[9, _],[2, 4, 7, 7])).

% juego6(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [ pieza(palitito,1),pieza(palitito,2),pieza(palitito,3),pieza(palitito,4)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
%     |   2   4   7   7
% ----+------------------
%  9  |   1   2   3   3
% 11  |   1   2   4   4

juego7(juego([
[_, _, _, _],
[_, _, _, _]
],[_, _],[_,_,_,_])).

% juego7(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [ pieza(palitito,1),pieza(palitito,1),pieza(palitito,1),pieza(palitito,1)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
% debe dar todas las formas de ubicar las piezas (estas son todas iguales). Son 120, se puede usar bagOf para ver la cantidad

juego8(juego([
[_, _, _, _],
[_, _, _, _]
],[4, -2],[_, _, _, _])).

% juego8(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [ pieza(palitito,1),pieza(palitito,1),pieza(palitito,-1),pieza(palitito,0)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
%     |   0   0   1   1
% ----+------------------
%  4  |   1   1   1   1
% -2  |   -1   -1   0   0
% 
%     |   1   1   0   0
% ----+------------------
%  4  |   1   1   1   1
%  -2  |   0   0   -1   -1
%  
%      |   0   0   1   1
% ----+------------------
%  4  |   1   1   1   1
%  -2  |   -1   -1   0   0
%  
%      |   1   1   0   0
% ----+------------------
%  4  |   1   1   1   1
%  -2  |   0   0   -1   -1

juego9(juego([
[1, 1, 1, 1],
[0, 0, -1, -1]
],[4, -2],[_, _, _, _])).

% juego9(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [ pieza(palitito,1),pieza(palitito,1),pieza(palitito,-1),pieza(palitito,0)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
% debe dar false porque el tablero esta lleno

juego10(juego([[_,_],[_,_]],[_,_],[_,_])).
%juego10(Juego), tetrominos2(DiccionarioPiezas), PiezasDisponibles = [ pieza(palitito,1)], resolver(DiccionarioPiezas, PiezasDisponibles, Juego), mostrarJuego(Juego).
%falso (no se llena el tablero)